﻿Module InstallUtil
    Private installutilArg As String = ""
    Sub Main(args As String())

        If args.Length = 0 Then
            ShowError("引数が不正です。")
            Return
        End If

        'installutil.exeのフルパスを取得
        Dim installutilPath As String = System.IO.Path.Combine(System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory(), "installutil.exe")
        If Not System.IO.File.Exists(installutilPath) Then
            ShowError("installutil.exeが見つかりませんでした。")
            Return
        End If
        'installutil.exeに渡すコマンドラインを作成
        For Each arg As String In args
            installutilArg += " " & (If(arg.IndexOf(" ") > -1, """" & arg & """", arg))
        Next

        'installutil.exeを起動
        Dim p As System.Diagnostics.Process
        Try
            p = System.Diagnostics.Process.Start(installutilPath, installutilArg)
            p.WaitForExit()
        Catch
            ShowError("installutil.exeの起動に失敗しました。")
            Return
        End Try

        If p.ExitCode <> 0 Then
            ShowError("installutil.exeがエラーコード(" & p.ExitCode.ToString() & ")を返しました。")
            Return
        End If

        System.Environment.ExitCode = 0

        Dim msgService As String
        If installutilArg.IndexOf("/u") >= 0 Then
            msgService = "サービスのアンインストールに成功しました。"
        Else
            msgService = "サービスのインストールに成功しました。"
        End If
        Console.WriteLine(msgService)
        Console.ReadKey()
    End Sub

    Private Sub ShowError(msg As String)
        Dim msgService As String
        If installutilArg.IndexOf("/u") >= 0 Then
            msgService = "サービスのアンインストールに失敗しました。"
        Else
            msgService = "サービスのインストールに失敗しました。"
        End If
        SystemError.SystemLog(msgService, msg)
        Console.WriteLine(msg & vbLf & msgService)
        System.Environment.ExitCode = 1

        Console.ReadKey()
    End Sub

End Module